home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / cool / ge_cool.lha / GE_COOL2.1 / src / Date_Time / Timer.C < prev    next >
C/C++ Source or Header  |  1992-04-13  |  5KB  |  193 lines

  1. //
  2. // Copyright (C) 1991 Texas Instruments Incorporated.
  3. //
  4. // Permission is granted to any individual or institution to use, copy, modify,
  5. // and distribute this software, provided that this complete copyright and
  6. // permission notice is maintained, intact, in all copies and supporting
  7. // documentation.
  8. //
  9. // Texas Instruments Incorporated provides this software "as is" without
  10. // express or implied warranty.
  11. //
  12. //
  13. // Created: BMK 07/14/89 -- Initial design and implementation
  14. // Updated: LGO 09/23/89 -- Conform to COOL coding style
  15. // Updated: AFM 12/31/89 -- OS/2 port
  16. // Updated: DLS 03/22/91 -- New lite version
  17. //
  18. // The CoolTimer class provides timing code  for performance evaluation.  This code
  19. // was originally written by Joe Rahmeh at UT Austin.
  20. //
  21. //  User time:
  22. //    time cpu spends in user mode on behalf of the program.
  23. //  System time:
  24. //    time cpu spends in system mode on behalf of the program.
  25. //  Real time:
  26. //    what you get from a stop watch timer.
  27. //
  28.  
  29. #include <cool/Timer.h>
  30.  
  31.  
  32. void CoolTimer::mark () {
  33. #if defined (DOS) || defined (MSDOS)
  34.  usage0 = clock();
  35. #else
  36.  getrusage(0, &usage0);
  37. #endif
  38.  ftime(&real0);
  39. }
  40.  
  41.  
  42. long CoolTimer::real () {
  43.  long s, ms;
  44.  timeb  real;        // current elapsed real time
  45.  
  46.  ftime(&real);
  47.  s  = real.time    - real0.time;
  48.  ms = real.millitm - real0.millitm;
  49.  if(ms < 0)
  50.    {ms += 1000;
  51.     s--;
  52.    }
  53.  return 1000*s + ms;
  54. }
  55.  
  56.  
  57. long CoolTimer::user () {
  58. #if defined (DOS) || defined (MSDOS)
  59.  register clock_t  usage1;
  60.  
  61.  if ((usage1 = clock()) != (clock_t) -1)
  62.     return (usage1 - usage0);
  63.  else   /* error: Processor time not available */
  64.     return (0L);
  65. #else
  66.  register long dsec, dusec;
  67.  rusage usage;       // current rusage structure
  68.  
  69.  getrusage(0, &usage);
  70.  dsec  = usage.ru_utime.tv_sec  - usage0.ru_utime.tv_sec;
  71.  dusec = usage.ru_utime.tv_usec - usage0.ru_utime.tv_usec;
  72.  if(dusec < 0)
  73.    {dusec += 1000000;
  74.     dsec--;
  75.    }
  76.  return(dsec*1000 + dusec/1000);
  77. #endif
  78. }
  79.  
  80.  
  81. long CoolTimer::system () {
  82. #if defined (DOS) || defined (MSDOS)
  83.  return(0L);
  84. #else
  85.  register long dsec, dusec;
  86.  rusage usage;       // current rusage structure
  87.  
  88.  getrusage(0, &usage);
  89.  dsec  = usage.ru_stime.tv_sec  - usage0.ru_stime.tv_sec;
  90.  dusec = usage.ru_stime.tv_usec - usage0.ru_stime.tv_usec;
  91.  if(dusec < 0)
  92.    {dusec += 1000000;
  93.     dsec--;
  94.    }
  95.  return(dsec*1000 + dusec/1000);
  96. #endif
  97. }
  98.  
  99.  
  100. long CoolTimer::all () {
  101. #if defined (DOS) || defined (MSDOS)
  102.  register clock_t  usage1;
  103.  
  104.  if ((usage1 = clock()) != (clock_t) -1)
  105.     return (usage1 - usage0);
  106.  else   /* error: Processor time not available */
  107.     return (0L);
  108. #else
  109.  register long dsec, dusec;
  110.  rusage usage;       // current rusage structure
  111.  
  112.  getrusage(0, &usage);
  113.  dsec  = usage.ru_utime.tv_sec   + usage.ru_stime.tv_sec
  114.        - usage0.ru_utime.tv_sec  - usage0.ru_stime.tv_sec;
  115.  dusec = usage.ru_utime.tv_usec  + usage.ru_stime.tv_usec
  116.        - usage0.ru_utime.tv_usec - usage0.ru_stime.tv_usec;
  117.  if(dusec < 0)
  118.    {dusec += 1000000;
  119.     dsec--;
  120.    }
  121.  return(dsec*1000 + dusec/1000);
  122. #endif
  123. }
  124.  
  125.  
  126. long CoolTimer::user_usec () {
  127. #if defined (DOS) || defined (MSDOS)
  128. register clock_t  usage1;
  129.  
  130.  if ((usage1 = clock()) != (clock_t) -1)
  131.     return (usage1 - usage0);
  132.  else   /* error: Processor time not available */
  133.     return (0L);
  134. #else
  135. register long dsec, dusec;
  136.  rusage usage;       // current rusage structure
  137.  
  138.  getrusage(0, &usage);
  139.  dsec  = usage.ru_utime.tv_sec  - usage0.ru_utime.tv_sec;
  140.  dusec = usage.ru_utime.tv_usec - usage0.ru_utime.tv_usec;
  141.  if(dusec < 0)
  142.    {dusec += 1000000;
  143.     dsec--;
  144.    }
  145.  return(dsec*1000000 + dusec);
  146. #endif
  147. }
  148.  
  149.  
  150. long CoolTimer::system_usec () {
  151. #if defined (DOS) || defined (MSDOS)
  152.  return(0L);
  153. #else
  154.  register long dsec, dusec;
  155.  rusage usage;       // current rusage structure
  156.  
  157.  getrusage(0, &usage);
  158.  dsec  = usage.ru_stime.tv_sec  - usage0.ru_stime.tv_sec;
  159.  dusec = usage.ru_stime.tv_usec - usage0.ru_stime.tv_usec;
  160.  if(dusec < 0)
  161.    {dusec += 1000000;
  162.     dsec--;
  163.    }
  164.  return(dsec*1000000 + dusec);
  165. #endif
  166. }
  167.  
  168.  
  169. long CoolTimer::all_usec() {
  170. #if defined (DOS) || defined (MSDOS)
  171.  register clock_t  usage1;
  172.  
  173.  if ((usage1 = clock()) != (clock_t) -1)
  174.     return (usage1 - usage0);
  175.  else   /* error: Processor time not available */
  176.     return (0L);
  177. #else
  178.  register long dsec, dusec;
  179.  rusage usage;       // current rusage structure
  180.  
  181.  getrusage(0, &usage);
  182.  dsec  = usage.ru_utime.tv_sec   + usage.ru_stime.tv_sec
  183.        - usage0.ru_utime.tv_sec  - usage0.ru_stime.tv_sec;
  184.  dusec = usage.ru_utime.tv_usec  + usage.ru_stime.tv_usec
  185.        - usage0.ru_utime.tv_usec - usage0.ru_stime.tv_usec;
  186.  if(dusec < 0)
  187.    {dusec += 1000000;
  188.     dsec--;
  189.    }
  190.  return(dsec*1000000 + dusec);
  191. #endif
  192. }
  193.